Computer systems have enjoyed immense popularity and versatility in part due to the ability to connect to and control a wide variety of input-output (I/O) peripheral devices. FIG. 1 shows a typical uni-processor computer system. Central Processing Unit (CPU) 10 is a processor that executes instructions and processes data that may be cached in cache 12. North bridge 14 connects CPU 10 with a main memory of Dynamic Random-Access Memory (DRAM) 18. South bridge 16 connects to peripheral bus 28, which could be a Peripheral Components Interconnect (PCI), PCI express bus, Serial AT Attachment (SATA) bus, or some other bus that accepts expansion cards or expansion devices.
A variety of I/O devices can be attached to peripheral bus 28. Ethernet 20 is a Network Interface Card (NIC) that couples the local computer to an external network over a physical medium such as a cable. Hard disk 22 is a rotating hard disk using a standard interface such as SATA or Integrated Device Electronics (IDE). Sectors of data and instruction code are read from hard disk 22 and copied into DRAM 18 for use by CPU 10.
Basic Input Output System (BIOS) 24 is a non-volatile read-only memory (ROM) that contains the first sequence of instructions executed by CPU 10 after powering on or rebooting. Other basic system routines may be contained in BIOS 24 and executed directly, or copied to DRAM 18 for faster execution by CPU 10 (shadow ROM).
Console 26 may be a serial port to an external logging or display device. Status information may be written to console 24 by CPU 10 during operation to allow for debugging or status checks of the system.
The rapid and continual decrease in cost and increase in complexity of silicon devices has allowed for multiple processors to be used in place of CPU 10. Furthermore, multiple computer systems may be connected together at a local node of a network and operate together as a multi-processing system. FIG. 2 shows a multi-processing system that shares part of a BIOS.
First computer 30 contains CPU 10, cache 12, north bridge 14, south bridge 16, DRAM 18, and local peripheral bus 28 that connects to Ethernet card 20, local hard disk 22, and boot-loader BIOS 24′. Remote computer 30′ contains CPU 10′, cache 12′, north bridge 14′, south bridge 16′ and remote peripheral bus 28′ that connects to Ethernet card 20′, and remote BIOS 32.
First computer 30 and remote computer 30′ are connected together by network 34, which may be an Ethernet or other network connection. Ethernet cards 20″ are other computers or Ethernet devices on network 34.
First computer 30 may be booted remotely using network 34. CPU 10 initially reads instructions from boot-loader BIOS 24′, including a boot-loader program that is copied into DRAM 18 and executed by CPU 10. This boot-loader program initializes Ethernet card 20, allowing packets to be sent and received from network 34. The boot-loader program sends packets over network 34 to remote computer 30′, where Ethernet card 20′ receives the packet and sends the encapsulated request to CPU 10′. CPU 10′ decodes the request from first computer 30 and reads boot code from remote BIOS 32. This remote boot code is sent from remote BIOS 32 over network 34 by Ethernet card 20′. Ethernet card 20 on first computer 30 receives packets containing the remote boot code read from remote BIOS 32 and loads the remote boot code into DRAM 18. CPU 10 can then execute the remote boot code, allowing booting to continue.
Thus remote booting is achieved by using a local BIOS (boot-loader BIOS 24′) and a remote BIOS (remote BIOS 32). This has the advantage of allowing for a smaller, cheaper ROM in first computer 30. Many computers on network 34 can share remote BIOS 32, reducing overall costs in a large network or enterprise.
Some systems may share Ethernet cards rather than share BIOS. Virtualized I/I is sometimes facilitated by changes to software. For example, special software drivers may be used to redirect or reformat network accesses. However, since the software must be changed, this kind of virtual I/O is not transparent.
What is desired is hardware-based virtualization of I/O that is transparent to the operating system and other software running on a computer. A generic virtualization scheme that can virtualize many kinds of peripheral devices is desired, rather than just virtualizing one or two kinds of peripheral devices. A universal virtualization device based in hardware is desired that can virtualize any kind of peripheral device. It is desired to transparently virtualize peripherals such as Network Interface cards, Ethernet cards, hard disks, BIOS, and consoles. It is also desired to virtualize the entire BIOS so that a local boot-loader is not required.